
/**  
* @Title: AsposeExcelUtil.java
* @Package com.utils.excel
* @Description: 
* @author likai
* @date 2018年11月22日
* @version V1.0  
*/

package com.utils.excel;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import com.aspose.cells.Workbook;
import com.aspose.cells.WorkbookDesigner;

/**
 * @ClassName: AsposeExcelUtil
 * @Description: excel导入导出处理工具，目前只封装了针对无合并行的excel处理
 * @author likai
 * @date 2018年11月22日
 *
 */

public class AsposeExcelUtil {
	
	/**
	   * @Description: 通过模板生成excel文件,支持excel函数，模板参考目录下template.xlsx
	   * @param {
	   * 	templateFilePath:模板文件路径
	   * 	outFilePath:生成文件路径
	   * 	baseSource：需绑定的基本类型数据
	   * 	listSource：需绑定的集合数据
	   * }
	   * @date 2018年11月22日
	   */
	public static void createExcelByTemplate(String templateFilePath,String outFilePath,Map<String, Object> baseSource,List<Map<String, Object>> listSource) throws Exception {
		Workbook wb = new Workbook(templateFilePath);
		WorkbookDesigner designer = new WorkbookDesigner();
		designer.setWorkbook(wb);
		if (baseSource!=null) {
			designer.setDataSource("baseSource", new HashMapDataTable(baseSource));		
		}
		if (listSource!=null) {
			designer.setDataSource("listSource", new HashMapDataTable(listSource));			
		}
		designer.process(true);
		wb.save(outFilePath);//生成报表
	}
	
	/**
	   * @Description: 通过模板生成excel，并直接返回给前端下载，模板参考目录下template.xlsx
	   * @param {
	   * 	templateFilePath:模板文件路径
	   * 	outFilePath:生成文件路径
	   * 	baseSource：需绑定的基本类型数据
	   * 	listSource：需绑定的集合数据
	   * }
	   * @date 2018年11月22日
	   */
	public static void createExcelByTemplate(String templateFilePath,HttpServletResponse response,Map<String, Object> baseSource,List<Map<String, Object>> listSource) throws Exception {
		Workbook wb = new Workbook(templateFilePath);
		WorkbookDesigner designer = new WorkbookDesigner();
		designer.setWorkbook(wb);
		if (baseSource!=null) {
			designer.setDataSource("baseSource", new HashMapDataTable(baseSource));		
		}
		if (listSource!=null) {
			designer.setDataSource("listSource", new HashMapDataTable(listSource));			
		}
		designer.process(true);
		wb.save(response.getOutputStream(), wb.getFileFormat());  
	}
	
	public static void main(String[] args) throws Exception {
		Map<String, Object> baseSource=new HashMap<>();
		baseSource.put("userName", "大世界");
		baseSource.put("name", "likai");
		List<Map<String, Object>> list=new ArrayList<>();
		Map<String, Object> data1=new HashMap<>();
		data1.put("age", 12);
		Map<String, Object> data2=new HashMap<>();
		data2.put("age", 44);
		list.add(data1);
		list.add(data2);
		baseSource.put("list", list);
		createExcelByTemplate("D:/demo.xls","D:/test1.xls", baseSource, null);
	}
}
